package com.neusoft.neu24.controller;



import com.neusoft.neu24.dto.LogDTO;
import com.neusoft.neu24.entity.Member;
import com.neusoft.neu24.entity.User;
import com.neusoft.neu24.result.Result;
import com.neusoft.neu24.service.UserService;
import com.neusoft.neu24.utils.JwtUtil;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/user")
@CrossOrigin //解决跨域问题
public class UserController {
    //注入userService
    @Autowired
    private UserService userService;

    @Resource
    private RedisTemplate<String,String> redisTemplate;



    /**
     * 用户注册接口
     * @param member 包含用户名和密码的用户对象，通过RequestBody接收前端传来的JSON数据
     * @return 返回注册结果，如果用户名不存在，则返回注册成功结果；否则返回错误信息
     *
     */
    @PostMapping("/register")
    public Result register (@RequestBody Member member) {
        String uname = member.getLogid();
        String psw = member.getLogpwd();
        String tel = member.getTel();
        String gender = member.getGender();
        Member byuser =  userService.findByUser(uname);
        //查询数据库判断该用户是否存在
        if (byuser == null){
            //不存在则注册成功，将用户名和密码添加到数据库中
            userService.register(uname,psw,tel,gender);
            return Result.success("注册成功！");
        }
        return Result.error("用户名已被占用！");
    }

    /**
     * 用户登录接口
     * @param member 包含用户名和密码的用户对象，通过RequestBody接收前端传来的JSON数据
     * @return 返回登录结果，如果用户名正确且密码匹配，则返回登录成功结果；否则返回错误信息
     *
     */
    @PostMapping("/login")
    public Result log(@RequestBody Member member){
        // 提取用户名和密码
        String uname = member.getLogid();
        String pword = member.getLogpwd();
        // 根据用户名查找用户
        Member byUser = userService.findByUser(uname);
        System.out.println(byUser);
        if (byUser == null){
            // 如果用户名不存在，则返回用户名错误信息
            return Result.error("用户名错误");
        }
        if (pword.equals(byUser.getLogpwd())){
            String token = JwtUtil.createToken(byUser.getLogid());
            System.out.println(token);
            redisTemplate.opsForValue().set("token"+token, String.valueOf(byUser),1, TimeUnit.DAYS);
            return Result.success(new LogDTO(byUser.getId(), byUser.getRoleid(), token));
        }
        // 如果密码不匹配，则返回密码错误信息
        return Result.error("密码错误！");
    }

    /**
     * 获取用户信息接口
     * @param token 用户登录时生成的token，通过@RequestHeader注解接收前端传来的token
     * @return 返回用户信息，如果token符合，返回用户信息，否则返回错误信息
     *
     */
    @GetMapping("/currentUser")
    public Result currentUser(@RequestHeader("Authorization") String token){
        return userService.findUserByToken(token);
    }
}
